/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.dao;

import br.com.deployment.daogenerico.DaoGenerico;
import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.interfaces.PessoaDaoIn;
import br.com.deployment.utilitario.TipoPessoa;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author luciano
 */
@Stateless
@LocalBean
public class PessoaDao extends DaoGenerico<Pessoa> implements PessoaDaoIn{
    
    public PessoaDao(){
        super(Pessoa.class);
    }
    
     public Pessoa findNome(String nome){
        Pessoa pessoa = new Pessoa();
        System.out.println("Nome::" + nome);
        Query query = getEm().createQuery("select p from Pessoa p where p.nome like :nome");
        query.setParameter("nome", nome);
        System.out.println("Nome pessoa1::" + pessoa);
        pessoa = (Pessoa) query.getSingleResult();
        System.out.println("Nome pessoa::" + pessoa);
        return pessoa;
    }
     
    public List<Pessoa> findPessoa(Pessoa pessoa, TipoPessoa tipoPessoa) {
        List<Pessoa> lista = new ArrayList<Pessoa>();
        if (pessoa != null) {
            
            String sql = "select r from Pessoa r where ";
            
            if((tipoPessoa != null)){
                sql += " r.tipo = :tipoPessoa and ";
            }            
            if((pessoa.getNome() != null) && (pessoa.getNome() != "")){
                sql += " lower(r.nome) like lower(:nome) and ";
            }
            if((pessoa.getCpf() != "") && (pessoa.getCpf() != null)){
                sql += " lower(r.cpf) like lower(:cpf) and ";
            }
            if((pessoa.getCnpj() != "") && (pessoa.getCnpj() != null)){
                sql += " lower(r.cnpj) like lower(:cnpj) and ";
            }

            sql += " 1=1 ";
             
            Query query = getEm().createQuery(sql);
            
            if((tipoPessoa != null)){
                query.setParameter("tipoPessoa", tipoPessoa);
            }
            
            if((pessoa.getNome() != null) && (pessoa.getNome() != "")){
                query.setParameter("nome", "%" + pessoa.getNome() + "%");
            }
            if((pessoa.getCpf() != "") && (pessoa.getCpf() != null)){
                query.setParameter("cpf", "%" + pessoa.getCpf() + "%");
            }
            if((pessoa.getCnpj() != "") && (pessoa.getCnpj() != null)) {
                query.setParameter("cnpj", "%" + pessoa.getCnpj() + "%");
            }

            lista = query.getResultList();
            System.err.println(sql);
          }
        return lista;
      } 
    
    public Pessoa findDoc(String doc){
          String sql = "Select p from Pessoa p where"
                  + " p.cpf like :doc or p.cnpj like :doc";
          Query query = getEm().createQuery(sql);
          query.setParameter("doc", ""+doc);
          return (Pessoa) query.getSingleResult();
      }
    
    @Override
    public boolean existCPF(String doc){
          String sql = "Select p from Pessoa p where"
                  + " p.cpf like :doc";
          Query query = getEm().createQuery(sql);
          query.setParameter("doc", ""+doc);
          return !query.getResultList().isEmpty();
    }
    @Override
    public boolean existCNPJ(String doc){
          String sql = "Select p from Pessoa p where"
                  + " p.cnpj like :doc";
          Query query = getEm().createQuery(sql);
          query.setParameter("doc", ""+doc);
          return !query.getResultList().isEmpty();
    }
    
    public List<Pessoa> pessoasOrder(){
       return getEm().createQuery("select p from Pessoa p order by p.nome").getResultList();
    }
    
    
}
